#include "unp.h"

static void err(int errnoflag, const char* fmt, va_list ap) {
	char buf[MAXLINE+1];
	vsnprintf(buf, MAXLINE, fmt, ap);

	int n = strlen(buf);
	if(errnoflag) {
		snprintf(buf+n, MAXLINE-n, "[errno=%d errmsg=%s]", errno, strerror(errno));
	}
	strcat(buf, "\n");

	fflush(stdout);
	fputs(buf, stderr);
	fflush(stderr);
}

void err_sys(const char* fmt, ...) {
	va_list ap;
	va_start(ap, fmt);
	err(1, fmt, ap);
	va_end(ap);
}

void err_exit(const char* fmt, ...) {
	va_list ap;
	va_start(ap, fmt);
	err(1, fmt, ap);
	va_end(ap);
	exit(-1);
}

void err_msg(const char* fmt, ...) {
	va_list ap;
	va_start(ap, fmt);
	err(0, fmt, ap);
	va_end(ap);
}
